package com.imooc.SmartChargeStation.demo.netty.handlers;

import com.imooc.SmartChargeStation.demo.protobuf.UserProtobuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

/**
 * author: zpy
 * description: Protobuf (客户端) 处理器
 * date: 2025/8/22
 */

@Slf4j
public class  ImoocClientProtobufHandler extends SimpleChannelInboundHandler<UserProtobuf.User> {
/*
    怎么理解？
    这是一个Netty客户端的入站消息处理器
    泛型<UserProtobuf.User> 表示这个处理器只处理消息类型是UserProtobuf.User的消息
    采用SimpleChannelInboundHandler自动释放ByteBuf对象
 */

    //当Netty服务器接收到UserProtobuf.User类型的Protobuf消息时，Netty会调用这个方法
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, UserProtobuf.User byteBuf) throws Exception {
        //解析消息、业务处理等
    }

    //客户端与服务端建立连接（通道激活）时，自动触发这个方法
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

        //计数器
        int count = 0;
        for(int i=0;i<100;i++) {

            //构建Protobuf消息
            UserProtobuf.User user = UserProtobuf.User.newBuilder().setName("hi,this is from Client Protobuf").build();
            //发送消息到服务端
            ctx.writeAndFlush(user);
            ++count;
            log.info("Protobuf粘包半包问题复现>>>>>NettyServer第"+count+"次的发送数据包:"+user.getName());

        }

    }
}
